package model;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;

import javax.sound.sampled.UnsupportedAudioFileException;

import org.json.JSONArray;
import org.json.JSONException;

import persistence.Playlist;
import persistence.Track;

/**
 * 
 * Die Klasse übernimmt das Serialisieren / Deserialisieren<br>
 * der Daten der Wiedergabelisten.
 *
 * @author Patrick
 * @sinde 30.11.2011
 *
 */
public class PlaylistModel {
	public Player _actualPlaylist;

	/**
	 * Die übergebene Wiedergabeliste wird im <br>
	 * Standartverzeichnis abgelegt also JSON-Datei
	 * 
	 * @author Patrick
	 * @since 30.11.2011
	 *
	 * @param aPlaylist
	 */
	public void save(Playlist aPlaylist) {
		String defaultPath = aPlaylist.getName() + ".json";
		this.save(aPlaylist, defaultPath);
	}

	/**
	 * Die übergebene Wiedergabeliste wird im <br>
     * angegebenen Verzeichnis abgelegt als 
     * JSON-File
	 *
	 * @author Patrick
	 * @since 30.11.2011
	 *
	 * @param aPlaylist
	 * @param path
	 */
	public void save(Playlist aPlaylist, String path) {
		try {
			JSONArray list = new JSONArray();
			for (Track t : aPlaylist) {
				list.put(t);
			}
			BufferedWriter writer = new BufferedWriter(new FileWriter(path));
			writer.write(list.toString());
			writer.flush();
			writer.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * Deserialisiert eine zuvor gespeicherte Wiedergabeliste.
	 * Die Datei muss ein JSON-File sein
	 *
	 * @author Patrick
	 * @since 30.11.2011
	 *
	 * @param aPath
	 * @return
	 */
	public Playlist load(String aPath) {
		LinkedList<Track> playlist = null;
		String name = null;
		
		try {
			JSONArray list;
			BufferedReader reader;
			playlist = new LinkedList<Track>();

			reader = new BufferedReader(new FileReader(aPath));

			String json = reader.readLine();
			
			reader.close();
			list = new JSONArray(json);
			for (int i = 0; i < list.length(); i++) {
				playlist.add(new Track(list.getString(i)));
			}
			name = aPath.replaceAll(".*\\\\", "").replace(".json", "");
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnsupportedAudioFileException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return (playlist != null)?new Playlist(playlist, name):null;
	}
}